<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Map数据</title>
</head>

<body>
  <script>
    let obj = new Map()
    // console.log(obj);
    obj.set('age', 20);
    obj.set('sex', '男');
    obj.set('score', { 语文: 99, 数学: 100, 英语: 100 });
    obj.set('money', 1000)

    let scores = obj.get('score')
    // console.log(scores); //{语文: 99, 数学: 100, 英语: 100}

    // 如果有money键，就删除sex。
    // obj.has('money') && obj.delete('sex')
    // console.log(obj);

    let arr1 = obj.keys();
    let arr2 = obj.values();
    let arr3 = obj.entries();
    // console.log(arr1); //MapIterator {'age', 'sex', 'score', 'money'}
    // console.log(arr2);// MapIterator {20, '男', {…}, 1000}
    // console.log(arr3); //MapIterator {'age' => 20, 'sex' => '男', 'score' => {…}, 'money' => 1000}


    // Map 对象按键值对迭代——一个 for...of 循环在每次迭代后会返回一个形式为 [key，value] 的数组。
    /*  for (const arr of obj) {
       console.log(arr); // ['age', 20]
     }
     // 在循环遍历时，直接对arr解构赋值
     for (const [key, value] of obj) {
       console.log(key, value); //'age', 20
     } */

    for (let key of arr1) {
      console.log(key);  // age,  sex, score, money
    }

    for (let value of arr2) {
      console.log(value);  // 20,'男'，{ 语文: 99, 数学: 100, 英语: 100 }，1000
    }

    // for (let arr of arr3) {
    //   console.log(arr); // ['age', 20]
    // }

    for (const [key, value] of arr3) {
      console.log(key, value); //'age', 20
    }

    // map对象。forEach((值，键名，对象的别名引用)=>{})
    
    // obj.forEach((value, key, _obj) => {
    //   console.log(value, key, _obj); // 20, 'age', obj对象的引用名称
    // })
  </script>
</body>

</html>